Vertex array objects are OpenGL Objects that store all of the state needed
to make one or more draw calls. This includes attribute array setup
information (from glVertexAttribArray
), buffer objects
used for attribute arrays, and the
GL_ELEMENT_ARRAY_BUFFER
binding, which is a buffer
object that stores the index arrays, if needed.
Rendering a contiguous range of vertices pulled from the currently bound attribute arrays (within the vertex array object). The vertices are sent in order from first to last in the range.
Rendering an arbitrary set of vertices pulled from the currently bound attribute arrays. The set of vertices is defined by the element array. The vertices are rendered in the order specified by the element array.
A list of indices, stored within a buffer object, that refer to elements in the currently bound attribute arrays.
The ability to render a scene such that objects that are behind other objects do not show through them. There are several methods available for achieving this.
Rendering objects or triangles in an order based on their Z-depth from the camera. An attempt at hidden surface elimination.
An image in the framebuffer that conceptually stores the distance of the pixel from the camera zNear plane. The depth buffer stores only one-dimensional values, instead of the 4-dimensional colors of the regular image buffer. Depth values are usually restricted to the range [0, 1].
The process of testing the incoming fragment's depth value against the depth value from the depth buffer for the pixel that the fragment would overwrite. If the test passes, then the fragment is written. If the test fails, the fragment is not written. This, combined with a depth buffer, can be used as a good method of hidden surface elimination.
The mapping from NDC-space Z coordinate [-1, 1] to window-space Z
coordinates [0, 1]. This mapping is set with the
glDepthRange
function. These are specified in
window-space coordinates. The -1 Z coordinate in NDC space maps to range
zNear, and the 1 maps to range zFar. The range zNear does not have to be
less than the range zFar.
A 4-dimensional coordinate system used to represent a 3-dimensional position. To compute the 3D position, the fourth coordinate is divided into the other 3. This kind of coordinate system allows mathematics to function in the presence of what would be undefined values otherwise. Namely division by zero.
The act of breaking a single triangle into one or more smaller ones so that they all fit within the visible region. Actual clipping, generating new vertices and such, is not often done by hardware; instead they usually try to cull fragments that are outside of the viewing area.
A rendering mode where clipping is turned off and the Z value of fragments is clamped to the depth range. This is used to prevent clipping from punching holes in objects, though it is not a foolproof solution.